﻿using SIOGDE.AccesoDatos.Entidades;
using SIOGDE.AccesoDatos.Entidades.Reportes;
using SIOGDE.Negocios.Servicios;
using SIOGDE.Reportes.Negocios.Shared;
using System;
using System.Collections.Generic;
using System.Drawing.Imaging;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using SIOGDE.Negocios;

namespace SIOGDE.Reportes.Negocios
{
    public class MemoAsignacionDestinoNegocios
    {
        public List<DTOPersona> GetMemoPersonalInfo(Dictionary<string, string> param)
        {
            string guidAsignacion = param[ReportParameterNames.GuidAsignacion];                        
            
            DestinoAsignado destino = BusinessFactory.Current.GetDestinoAsignadoNegocios().ObtenerPorGuid(guidAsignacion);

            Persona p = destino.Persona;
            int PersonaId = p.Id;

            
            DTOPersona dtoPersona = new DTOPersona();
            dtoPersona.ApellidoMaterno = p.ApellidoMaterno;
            dtoPersona.ApellidoPaterno = p.ApellidoPaterno;
            dtoPersona.CI = p.CI;
            dtoPersona.CIMilitar = p.CIMilitar;
            
            //dtoPersona.Codigo = p.Codigo;
            int contador = BusinessFactory.Current.GetDestinoAsignadoNegocios().CountPorGestionActiva();
            dtoPersona.Codigo = contador.ToString().PadLeft(5, '0');

            dtoPersona.Email = p.Email;
            dtoPersona.EsPersonaCivil = p.EsPersonaCivil;
            dtoPersona.Estatura = p.Estatura;
            dtoPersona.Etnia = p.Etnia;
            dtoPersona.FechaEgreso = p.FechaEgreso!=null?p.FechaEgreso.Value:DateTime.Now;
            dtoPersona.FechaNacimiento = p.FechaNacimiento!=null?p.FechaNacimiento.Value:DateTime.Now;
            dtoPersona.Genero = p.Genero;
            dtoPersona.LugarNacimiento = p.LugarNacimiento;
            dtoPersona.Nombre1 = p.Nombre1;
            dtoPersona.Nombre2 = p.Nombre2;
            dtoPersona.NumAntiguedadEgreso = p.NumAntiguedadEgreso;
            dtoPersona.Peso = p.Peso;
            dtoPersona.Raza = p.Raza;

            dtoPersona.CargoActual = destino.RequerimientoConfig.TipoCargoComando.Nombre;
            dtoPersona.CargoProximo = destino.RequerimientoConfig.TipoCargoComando.Nombre;

            var especialidades = BusinessFactory.Current.GetEspecialidadNegocios().GetPorPersonaId(PersonaId).ToList();
            var grado = BusinessFactory.Current.GetGradoNegocios().GetPorPersonaId(PersonaId);
            var arma = BusinessFactory.Current.GetArmaNegocios().GetPorPersonaId(PersonaId);

            var historialAscenso = BusinessFactory.Current.GetHistorialAscensoNegocios().GetPorPersonaId(PersonaId).FirstOrDefault();


            dtoPersona.NumeroAntiguedadAscenso = historialAscenso != null ? historialAscenso.NumAntiguedad : 0;
            dtoPersona.FechaAscenso = historialAscenso != null ? historialAscenso.FechaAscenso : new Nullable<DateTime>();


            dtoPersona.Especialidad = string.Join(", ", especialidades.Select(pobj => pobj.Nombre).ToArray());


            dtoPersona.Grado = grado.Nombre;
            dtoPersona.Arma = arma.Codigo;
            dtoPersona.Fuerza = arma.Fuerza.Nombre;


            if (destino != null)
            {                
                var user = SIOGDE.Negocios.Global.Session.UserInfo;

                dtoPersona.DestinoActual = user.Rol.Nombre;

                if (user.Rol.Id == 4)
                    dtoPersona.RegionDestinoActual = "Cochabamba";
                if (user.Rol.Id == 6)
                    dtoPersona.RegionDestinoActual = "La Paz";
                if (user.Rol.Id == 7)
                    dtoPersona.RegionDestinoActual = "La Paz";
                if (user.Rol.Id == 8)
                    dtoPersona.RegionDestinoActual = "La Paz";
                

                dtoPersona.DestinoProximo = destino.RequerimientoConfig.UnidadMilitar.Nombre.TrimEnd(' ');
                dtoPersona.RegionDestinoProximo = destino.RequerimientoConfig.UnidadMilitar.Region.Nombre.TrimEnd(' ');
            }

            var media = BusinessFactory.Current.GetMediaNegocios().ObtenerPorGuid(p.Guid);
            if (media != null)
                dtoPersona.Fotografia = media.Recurso;

            string datoCodigo = dtoPersona.CI+"-"+dtoPersona.Grado+"-"+dtoPersona.Arma+"-"+dtoPersona.Especialidad+" "+dtoPersona.ApellidoPaterno+" "+dtoPersona.ApellidoMaterno+" "+dtoPersona.Nombre1+"-"+dtoPersona.DestinoProximo;
            dtoPersona.CodigoQR = Didsoft.Utils.CodeBars.Common.GenerateQRCode(datoCodigo, ImageFormat.Png);


            string tempCodigo = SIOGDE.Negocios.Global.Session.GestionActiva.Nombre + " - " + dtoPersona.DestinoProximo + " - " + SIOGDE.Negocios.Global.Session.UserInfo.Persona.Id;
            dtoPersona.CodigoTempQR = Didsoft.Utils.CodeBars.Common.GenerateQRCode(tempCodigo, ImageFormat.Png);

            List<DTOPersona> personas = new List<DTOPersona>();
            personas.Add(dtoPersona);

            return personas;
        }


        public List<DTOPersona> GetMemoDeTodaLaGestion(Dictionary<string, string> param)
        {
            string gestionId = param[ReportParameterNames.GestionId];

            DestinoAsignadoNegocios negocios = new DestinoAsignadoNegocios();
            List<DestinoAsignado> destinados = negocios.GetPorGestionActiva();

            List<DTOPersona> personas = new List<DTOPersona>();

            foreach (var item in destinados)
            {
                param.Add(ReportParameterNames.GuidAsignacion, item.Guid);
                personas = personas.Union(GetMemoPersonalInfo(param)).ToList();
            }

            return personas;
        }
        
    }
}
